/*
 * 如果说前面的工厂模式是对接口进行抽象化处理，那么建造者模式更像是对流程本身的一种抽象化处理。
 *
 * 这话怎么理解呢？大家可以听我慢慢到来。
 *
 * 以前买电脑的时候，大家都喜欢自己组装机器。一方面可以满足自己的个性化需求，
 *
 * 另外一方面也可以在价格上得到很多实惠。但是电脑是由很多部分组成的，
 *
 * 每个厂家都只负责其中的一部分，而且相同的组件也有很多的品牌可以从中选择。
 * 
 * 这对于我们消费者来说当然非常有利，那么应该怎么设计呢？
 */

typedef struct assemble_personal_computer
{
	void (*assemble_cpu)();
	void (*assemble_memory)();
	void (*assemble_harddisk)();
}assemble_personal_computer;

/*
 * 对于一个希望配置intel cpu，samsung 内存、日立硬盘的朋友。他可以这么设计
 */
void assemble_intel_cpu()
{
	printf("intel cpu!\n");
}

void assemble_samsung_memory()
{
	printf("samsung memory!\n");
}

void assemble_hitachi_harddisk()
{
	printf("hitachi harddisk!\n");
}

/* 
 * 而对于一个希望配置AMD cpu, kingston内存、西部数据硬盘的朋友。他又该怎么做呢？
 */
void assemble_amd_cpu()
{
	printf("amd cpu!\n");
}

void assemble_kingston_memory()
{
	printf("kingston memory!\n");
}

void assmeble_western_digital_harddisk()
{
	printf("western digital harddisk!\n");
}
